package com.service.check_data;


import com.domain.Equip_data;
import com.domain.Tcp_public_data;
import com.service.Public_funtion;
import io.netty.channel.ChannelHandlerContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.ArrayUtils;

import java.util.List;

import static com.MysqlApplication.equip_list;
import static com.MysqlApplication.global_data;

@Service
public class Check_equip_Server_data {

    @Autowired
    private Public_funtion p;
/**
 * // 检查 校验位错误
 */
    public boolean check_checkData(byte[] data)
    {
        int add1 = 0,add2 = 0;
        int i;
        for ( i=2; i < data.length - 4; i++) {
            add1 +=((int)data[i]&0xff);
        }
        int length1=((int)(data[data.length-4]&0xff)<<8);
        int length2=(data[data.length-3])&0xff;
        add2=length1+length2;
        if (add2==add1)
        {
            p.print_log( "校验位正确。",9);
            return true;
        }
        else
        {
            int check1=add1 / 256;
            int check2=add1 % 256;
            p.print_log( "校验位不正确，拒绝写入。"+"应该是："+String.valueOf(check1)+"和"+String.valueOf(check2)+"。",7);
            return false;
        }
    }
/**
 * // 检查 编号重复
 */
public String check_key_name(List<Tcp_public_data> map , byte[] getHex)
    {
        for (int i=0;i<map.size();i++)
        {
            char[] LS=new char[5];
            if (getHex[4] == LS[4] && getHex[5] == LS[5])
            {
                return  "出现相同编号，拒绝写入。";
            }
        }
        return  "编号是新的。";
    }
/**
 * // 通过编号获取map
 */
public ChannelHandlerContext get_sender_from_key_name(List<Tcp_public_data> map  , byte[] getHex)
    {
//        for (int i=0;i<map.size();i++)
//        {
//            ChannelHandlerContext valued = user_map.get(i).getIpaddr();
//            char[] LS;
//            LS = map.get(i).getNum();
//            if (getHex[4] == LS[4] && getHex[5] == LS[5])
//            {
//                return valued;
//            }
//        }
        return  null;
    }
/**
 * // 检查头
 */
public    boolean check_head()
{
    byte[] data=global_data.Byte_data;
    if(data[0]==0x55&&data[1]==0x55)
    {
        p.print_log("头正确。",9);
        return true;
    }

    p.print_log("头码不为2个55。",7);
    global_data.setTcp_data(null);
    return false;
}

    /**
     * // 检查长度
     */
    public    byte[] check_lenth()
    {
        if(global_data.getTcp_data().length()<18)
            return null;
        byte[] data=p.toByteArray(global_data.getTcp_data());

        int length=(int)data[14]<<8;
        int length2=(int)data[15];
        length=length+length2+20;
        if(length>data.length)
        {
            p.print_log("tcp长度错误",3);
            global_data.setTcp_data(null);
            return null;
        }
            byte[] newdata=new byte[length];
            byte[] olddata=new byte[data.length-length];
            System.arraycopy(data,0,newdata,0,length);
            System.arraycopy(data,16,olddata,0,data.length-length);
            global_data.setTcp_data(new String(olddata));
        return newdata;
    }

    /**
     * // 检查尾
     */
    public    byte[] check_tail()
    {
        int length,length1,length2;
        length1=((int)global_data.Byte_data[14]&0xff)<<8;
        length2=((int)global_data.Byte_data[15]&0xff);
        length=length1+length2;
        byte[] data=new   byte[length+20];

        if(global_data.Byte_data[length+18]==0x13&&global_data.Byte_data[length+19]==0x14)
        {
            p.print_log("尾正确。",9);
            System.arraycopy(global_data.Byte_data,0,data,0,length+20 );
            return data;
        }
        else
        {
            p.print_log("尾码不为13、14。",7);
            return null;
        }

    }

/**
 * 通过时间删除编号和IP信息
 */
public     String deleat_Info_to_time(List<Tcp_public_data> map)
    {
//        tcpDataInformation D=new tcpDataInformation();
        Public_funtion U=new Public_funtion();
        long thisdate=U.getLongData();
        String report="";
        for (int i=0;i<map.size();i++)
        {
            long getdate=map.get(i).getClour();
            if(getdate==thisdate)
            {
                map.remove(i);
            }
            report+="删除死连接"+"成功";
        }
        return report;
    }



}

